package T;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;

public class Stream1 {
    public static void main(String[] args) {
        Stream1 stream1 = new Stream1();
        stream1.Filter();
        stream1.FilterAny();
        stream1.FilterAll();
    }

    /**
     * 筛选
     * 惰性求值：filter 等中间操作不会立即执行，只有在终止操作（如 findFirst）触发时才会处理数据。
     * 一次性使用：Stream 一旦被消费（如调用 findFirst），就不能重复使用。
     */
    public void Filter() {
        List<Integer> list = Arrays.asList(5, 6, 7, 8, 9);
        Stream<Integer> stream = list.stream().filter(x -> x > 5);
        //返回流中的 第一个元素（如果流非空），封装在 Optional 中。
        Optional<Integer> first = stream.findFirst();
        if (first.isPresent()) {
            System.out.println(first.get());
        } else {
            System.out.println("没有大于6的数字");
        }
    }

    //匹配任意值（适合用并行流）
    public void FilterAny() {
        List<Integer> list = Arrays.asList(5, 6, 7, 8, 9);
        Optional<Integer> any = list.parallelStream().filter(x -> x > 5).findAny();
        if (any.isPresent()) {
            System.out.println(any.get());
        } else {
            System.out.println("没有大于6的数字");
        }
    }

    //输出所有
    public void FilterAll() {
        List<Integer> list = Arrays.asList(5, 6, 6, 7, 8, 9);
        list.stream().filter(integer -> integer.equals(6)).forEach(integer -> System.out.print(integer+" "));
    }


}
